package br.com.agregador.servicoimpl;

import javax.persistence.NoResultException;
import javax.servlet.http.HttpServletRequest;

import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import br.com.agregador.entity.Usuario;
import br.com.agregador.util.Criptografia;

@Service("usuarioDetailsServiceImpl")
@Transactional(readOnly = true)
public class UsuarioDetailsServiceImpl implements UserDetailsService {

	//@Autowired
	//private UsuarioDAO usuarioDAO;

	@Override
	public UserDetails loadUserByUsername(String email)throws UsernameNotFoundException {		
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
		//recuperando a senha para verificar a criptografia
		String senha = request.getParameter("j_password");	
		if(senha.trim().equals("")){
			throw new UsernameNotFoundException("Email ou senha inválidos");
		}
		String senhaCriptografada = new Criptografia().criptografar(senha);		
		Usuario usuario = null;
		try {
			usuario = null;//usuarioDAO.recuperarUsuarioLogin(email);			
			if(usuario.getSenha().equals(senhaCriptografada)){
				//evita que a jpa atualize (retira do contexto) o usuário no banco quando for feito um set
				//usuarioDAO.getEntityManager().detach(usuario);
				//altera a senha para a mesma do j_password que será verficado também pelo spring
				usuario.setSenha(senha);		
			}
		} catch (NoResultException e) {
			throw new UsernameNotFoundException("Email ou senha inválidos");
		}
		return null;
	}

}
